package Modelo;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JComboBox;


public class Conexion implements ManejadorProxy {
    
    // La descripcion del driver de la BD     
    private static String driver = "org.postgresql.Driver";
    // La direccion URL de la BD
    private static String url = "jdbc:postgresql://localhost:5432/";
    // El nombre de la BD
    private static String bd = "BD1-6";
    // EL login del usuario para conectarse al servidor de BD
    private static String usuario = "postgres";
    // EL password del usuario para conectarse al servidor de BD
    private static String password = "postgres";
    

    private static Connection conexion;
    public Conexion()
    {
    	abrirConexion();
    }
    
    
	/**
     * Metodo utilizado para Obtener una conexion a BD
     * @return Un objeto tipo Connection que representa una conexion a la BD
     */
    public Connection getConexion() {
    	return conexion;
    }

    /** * Metodo consultar
     * @param String tiraSQL
     * @return ResultSet
     */ 
    public void ejecutar(String sql)
    {
       try
        {

        Statement st = conexion.createStatement();
        st.execute(sql);
       }
       catch (Exception e)
       {
                System.out.println(e);
       }
    }

    public ResultSet consulta(String sql)
    {
        ResultSet rs;
        try
        {
            Statement st = conexion.createStatement();
            rs= st.executeQuery(sql);
            return rs;

        }
        catch(Exception e)
        {
             System.out.println(e);

            return null;
        }

    }
    
    public int getNumero(String nombreTabla,String nombreCampo)
    {
        int n=1;
        try
        {
            String sql="select max(\""+nombreCampo +"\") from \""+ nombreTabla +"\"";
            ResultSet rs = this.consulta(sql);

            if (rs.next())
                n=rs.getInt(1) +1;
            else
                n=1;


        }
        catch(Exception e)
        {
            System.out.println(e);
        }
        return n;
    }
    
    public void llenarCombo(JComboBox c,String sql)
    {
        try
        {
            c.removeAllItems();
            c.addItem("[Elija una Opcion]");
            System.out.println(sql);
            ResultSet rs = this.consulta(sql);
            while (rs.next())
            {
                c.addItem(""+rs.getString(1));
            }
        }
        catch (Exception e)
        {
            System.out.println(e);
        }
    }
    
    public Object getCampo(String tabla,String filtro)
    {
        Object val="";
        try
        {
            ResultSet rs= this.consulta("select *from \""+ tabla +"\" where "+filtro);
            if (rs.next())
                val=rs.getObject(1);
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
        return val;
    }
    
    public boolean existe(String tabla,String filtro)
    {
        boolean val=false;
        try
        {
            ResultSet rs= this.consulta("select *from \""+ tabla +"\" where "+filtro);
            if (rs.next())
                val=true;
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
        return val;
    }


	@Override
	public void abrirConexion() {
		// TODO Auto-generated method stub
    	try{
    		if (conexion == null || conexion.isClosed()) {	        
	        	// Cargo el driver en memoria
	            Class.forName(driver);
	            // Establezco la conexion
	            conexion=DriverManager.getConnection(url+bd,usuario,password);
	        }
    	}
        catch(SQLException e){
        	e.printStackTrace();
        } 
        catch (ClassNotFoundException e) {
        	e.printStackTrace();
		}
		
	}


	@Override
	public void cerrarConexion() {
		// TODO Auto-generated method stub
		try {
			conexion.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}
